package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblSubcateg;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.jpa.TblTipoCuentaPaquete;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAltaForm;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesForm;
import com.mastercard.assets.web.struts.forms.AssetBorrarForm;
import com.mastercard.assets.web.struts.forms.AssetBuscarForm;
import com.mastercard.assets.web.struts.forms.AssetEditarForm;
import com.mastercard.assets.web.struts.forms.AssetModificarPaquetesForm;
import com.mastercard.assets.web.struts.forms.AutorizarPaqueteRegistrarForm;
import com.mastercard.assets.web.struts.forms.CatalogoNuevoItemForm;
import com.mastercard.assets.web.struts.forms.LoginForm;
import com.mastercard.assets.web.struts.forms.SolicitarPaqueteRegistrarForm;
import com.mastercard.assets.web.util.to.ManejadorPaquetesSolicitar;
import com.mastercard.assets.web.util.to.UserLogin;

public class AutorizarPaqueteIn
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// verifica el role que tiene
		int roleId = user.getActualRoleId( ) ;
		
		// en caso de 1 (BDM) o 3(Banco)
		if( roleId == 1 || roleId == 3 )
		{
			// verifica cuentas cuentas existen que sean hermanas, es decir, que se encuentren dentro del mismo tipo de
			// cuenta pero que no sean la cuenta a la que pertenece el usuario logueado
			List< TblCuenta > cuentasHermanas = user.getBindCounts( ) ;
			
			// en caso de que no haya cuentas
			if( cuentasHermanas.size( ) == 0 )
			  	return mapping.findForward( "NoCounts" ) ;
			
			System.out.println( "## AutorizarPaqueteIn.java: cuentas hermanas " + cuentasHermanas.size( ) ) ;
			
			// en caso de que si haya cuentas
			// crea el form
			AutorizarPaqueteRegistrarForm f = new AutorizarPaqueteRegistrarForm( ) ;
			
			f.setCveCuenta( user.getActualCountId( ) ) ;
			f.setCveTipoCuenta( user.getActualCountType( ).getCveTipoCuenta( ) ) ;
			f.getPackageManager( ).setBindCounts( cuentasHermanas ) ;
			
			// inicializa
			try
			{
				f.getPackageManager( ).initialize( ) ;
				
				request.setAttribute( "AutorizarPaqueteRegistrarForm" , f ) ;
				
			  	return mapping.findForward( "success" ) ;
			}catch( Exception e )
			{
				e.printStackTrace( ) ;
			  	return mapping.findForward( "Error" ) ;
			}
			
		}
		// en caso contrario
		else
		  	return mapping.findForward( "WrongRole" ) ;
	}
	
}
